// components/pickerTime/pickerTime.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {},

  /**
   * 组件的初始数据
   */
  data: {
    years: [], //年-月列表
    days: [], //日期列表
    hours: [], //小时列表
    minutes: [], //分支列表
    pickerTime: [0, 0, 0, 0], //列表选定的列集合
    timeRegion: "", //选定的时间字符串
    hList1: [], //未满24小时（第一天的小时列表）
    hList2: [], //完整24小时（第二天的小时列表）
    mList1: [], //第一个小时的分钟列表（不一定满60分钟）
    mList2: [], //满60分钟
    mList3: [], //最后一小时的分钟列表（不一定满60分钟）
    dList: [], //日期列表（最多有两个）
    yList: [], //年/月列表（最多有两个）
    yTime: 0, //已选年-月索引
    dTime: 0, //已选日期索引
    hTime: 0, //已选小时索引
    mTime: 0, //已选分钟索引
    hList: [], //所有小时列表（24）
  },
  lifetimes: {
    attached: function () {
      // 在组件实例进入页面节点树时执行
      this.handleTime();
    },
  },
  /**
   * 组件的方法列表
   */
  methods: {
    // 处理时间
    handleTime() {
      this.getPastTime();
      this.handleTimeRegion();
    },
    // 切换处理
    bindChange({ detail }) {
      console.log(detail, 2222);
      const data = detail.value;
      // 索引
      let yTime = this.data.yTime;
      let dTime = this.data.dTime;
      let hTime = this.data.hTime;
      let mTime = 0;
      let minutes = this.data.minutes;
      let hours = this.data.hours;
      // 年/月切换
      // 只有跨月（跨年）才会有机会切换
      if (data[0] != this.data.yTime) {
        yTime = data[0];
        // 如跨月（跨年）第一个日期是上个月的，第二个日期是下个月的
        dTime = data[0];
        hTime = 0;
        mTime = 0;
        // 如果是第一天，小时列表为hList1，否则为hList2
        hours = dTime == 0 ? this.data.hList1 : this.data.hList2;
        minutes = dTime == 0 ? this.data.mList1 : this.data.mList3;
      }
      // 日期切换
      if (data[1] != this.data.dTime) {
        dTime = data[1];
        hTime = 0;
        mTime = 0;
        // 如果有跨月/年，年月和日要同步
        if (this.data.yList.length > 1) {
          yTime = data[1];
        }
        // 如果是第一天，小时列表为hList1，否则为hList2
        hours = data[1] == 0 ? this.data.hList1 : this.data.hList2;
        minutes = data[1] == 0 ? this.data.mList1 : this.data.mList3;
      }
      // 小时切换
      if (data[2] != this.data.hTime) {
        // 切换到第一天的第一个小时
        if (data[0] == 0 && data[1] == 0 && data[2] == 0) {
          minutes = this.data.mList1;
        } else if (
          data[0] == this.data.yList.length - 1 &&
          data[1] == 1 &&
          data[2] == this.data.hList2.length - 1
        ) {
          // 第二天的最后一个小时
          minutes = this.data.mList2;
        } else {
          // 中间小时
          minutes = this.data.mList3;
        }
        hTime = data[2];
        mTime = 0;
      }
      // 分钟切换
      if (data[3] != this.data.mTime) {
        mTime = data[3];
      }
      this.setData({
        days: this.data.dList,
        hours,
        minutes,
        pickerTime: [yTime, dTime, hTime, mTime],
        yTime,
        dTime,
        hTime,
        mTime,
      });
      this.handleTimeRegion();
    },
    getPastTime() {
      // 获取24小时之后的时间戳
      const nextTime = new Date().getTime() + 24 * 60 * 60 * 1000;
      // 一个小时之后的时间戳
      const currentTime = new Date().getTime() + 60 * 60 * 1000;
      // 处理年月
      this.getYM(currentTime, nextTime);
      // 处理日
      this.getDay(currentTime, nextTime);
      // 处理小时
      this.getHour(currentTime, nextTime);
      // 处理分钟
      this.getMinute(currentTime, nextTime);
    },
    // 获取年月列表
    getYM(currentTime, nextTime) {
      const yTime1 = this.timeFormat(currentTime, "getFullYear");
      const yTime2 = this.timeFormat(nextTime, "getFullYear");
      let mTime1 = this.timeFormat(currentTime, "getMonth");
      let mTime2 = this.timeFormat(nextTime, "getMonth");
      const resStr1 = yTime1 + "-" + mTime1;
      const resStr2 = yTime2 + "-" + mTime2;
      // 去重处理
      const yList = Array.from(new Set([resStr1, resStr2]));
      this.setData({
        years: yList,
        yList,
      });
      console.log("yList:", yList);
    },
    // 获取日期
    getDay(currentTime, nextTime) {
      let dTime1 = this.timeFormat(currentTime, "getDate");
      let dTime2 = this.timeFormat(nextTime, "getDate");
      // 去重处理
      const dList = Array.from(new Set([dTime1, dTime2]));
      this.setData({
        dList,
        days: dList,
      });
      console.log("dList:", dList);
    },
    // 获取小时列表，整点需要处理
    getHour(currentTime, nextTime) {
      let workTime = currentTime;
      let hList1 = [],
        hList2 = [],
        hList = [];
      // 第一天的日期
      const day1 = this.timeFormat(currentTime, "getDate");
      while (workTime <= nextTime) {
        let H = this.timeFormat(workTime, "getHours"); //获取当前小时数(0-23)
        // 第二天的日期
        const day2 = this.timeFormat(workTime, "getDate");
        if (day1 == day2) {
          hList1.push(H);
        } else {
          hList2.push(H);
        }
        hList.push(H);
        workTime = workTime + 3600000;
      }
      // 获取分钟
      let M = this.timeFormat(currentTime, "getMinutes"); //获取当前分钟数(0-59)
      // 判断如果是整点，就去掉最后一个小时
      if (M == "00") {
        hList2.splice(hList2.length - 1);
      }
      this.setData({
        hList1,
        hList2,
        hList,
        hours: hList1,
      });
      console.log("hList:", [hList1, hList2]);
    },
    // 获取分钟列表
    getMinute(currentTime, nextTime) {
      let workTime = currentTime;
      let mList1 = [],
        mList2 = [],
        mList3 = [];
      while (workTime <= nextTime) {
        // 获取小时
        let H = this.timeFormat(workTime, "getHours"); //获取当前小时数(0-23)
        // 获取分钟
        let M = this.timeFormat(workTime, "getMinutes"); //获取当前分钟数(0-59)
        if (H == this.data.hList[0]) {
          // 第一个小时
          mList1.push(M);
        } else if (
          H == this.data.hList[this.data.hList.length - 1] &&
          M != "00"
        ) {
          //最后一个小时（不是整点,不满一个小时）
          mList2.push(M);
        } else if (
          H == this.data.hList[this.data.hList.length - 1] &&
          M == "00"
        ) {
          //最后一个小时（整点，满一个小时）
          mList2.push(M);
        }
        workTime = workTime + 60000;
      }
      // 获取满一个小时的分钟数
      for (let i = 0; i < 60; i++) {
        const M = i > 9 ? i : "0" + i;
        mList3.push(M);
      }
      this.setData({
        mList1,
        mList2,
        mList3,
        minutes: mList1,
      });
      console.log("mList:", [mList1, mList2, mList3]);
    },
    //时间生成并加0处理
    timeFormat(time, type) {
      let resTime = new Date(time)[type]();
      // 获取月份的要+1
      resTime = type == "getMonth" ? resTime + 1 : resTime;
      // 小于10，前面加0
      resTime = resTime > 9 ? resTime : "0" + resTime;
      return resTime;
    },
    // 处理最后生成的pickerTime字符串
    handleTimeRegion() {
      const data = this.data.pickerTime;
      const y = this.data.years[data[0]];
      const d = this.data.days[data[1]];
      const h = this.data.hours[data[2]];
      const m = this.data.minutes[data[3]];
      const timeRegion = y + "-" + d + " " + h + ":" + m + ":" + "00";
      this.setData({
        timeRegion,
      });
    },
    // 取消
    onCancel() {
      const obj = {
        timeRegion: "",
        isPicker: false,
      };
      this.triggerEvent("onselect", obj);
    },
    // 确认
    onChecking() {
      const obj = {
        timeRegion: this.data.timeRegion,
        isPicker: true,
      };
      this.triggerEvent("onselect", obj);
      console.log(obj)
    },
  },
});



